﻿using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;


//测试得出的结果：
//触发顺序：1 OnPointerEnter OnPointerDown OnBeginDrag OnDrag OnPointerUp OnPointerClick OnEndDrag
namespace ugui.demo1
{
    public class Demo1 : MonoBehaviour,
        IPointerDownHandler,
        IPointerClickHandler,

        IPointerEnterHandler,
        IPointerExitHandler,
        IPointerUpHandler,

        IBeginDragHandler,
        IDragHandler,
        IEndDragHandler,

        IDropHandler


    {

        // Use this for initialization
        void Start()
        {

        }

        // Update is called once per frame
        void Update()
        {
            
        }
        //鼠标指针从该Widget刚进入触发
        public void OnPointerEnter(PointerEventData eventData)
        {
            //Debug.LogError("OnPointerEnter");

            //6 eventData.enterEventCamera：这个事件是由哪个摄像机执行的
            Debug.LogError("OnPointerEnter:"+ eventData.enterEventCamera);

            Debug.LogError("OnPointerEnter eventData.pointerEnter:" + eventData.pointerEnter);
        }
        //鼠标指针从该Widget刚移出触发
        public void OnPointerExit(PointerEventData eventData)
        {
            //Debug.LogError("OnPointerExit");
        }
        //鼠标点击该Widget 抬起释放触发
        public void OnPointerUp(PointerEventData eventData)
        {
            Debug.LogError("OnPointerUp");
            //8 eventData.lastPress
            Debug.LogError("OnPointerUp eventData.lastPress:" + eventData.lastPress);

            Debug.LogError("OnPointerUp eventData.pointerDrag:" + eventData.pointerDrag);//有效
        }
        //鼠标点击该Widget 刚摁住按钮 触发
        public void OnPointerDown(PointerEventData eventData)
        {
            //连续的点击数量
            //1 test result:不一定要在同地方点击，只要保证点击间隔足够短（具体的时间没测试），并且是连续的不能中断
            int i = eventData.clickCount;
            Debug.LogError("OnPointerDown eventData.clickCount:" + i);
            //2 test result: 对应鼠标左 中 右 键
            Debug.LogError("OnPointerDown eventData.button:" + eventData.button.ToString());

            //8 上次摁住的GameObject
            //test result:如果是第一次点击为空，二次点击是上次点的对象
            //注意eventData.lastPress只能在OnPointerDown OnEndDrag获取，摁住拖动到是否一系列触发 OnBeginDrag OnDrag  OnPointerUp，OnPointerClick 该值都为空。
            Debug.LogError("OnPointerDown eventData.lastPress:" + eventData.lastPress);
            Debug.LogError("OnPointerDown eventData.pointerDrag:" + eventData.pointerDrag);//无效

            //17 点击的位置
            // test result: 
            Debug.LogError("OnPointerDown eventData.pressPosition:" + eventData.pressPosition);

            //18 rawPointerPress 当Press事件不能处理时，可以发生这个对象上？？？
            // test result: 暂时不知道怎么使用
            Debug.LogError("OnPointerDown eventData.pressPosition:" + eventData.rawPointerPress);
        }
        //一次点击事件 OnPointerDown OnPointerUp之后再触发OnPointerClick
        public void OnPointerClick(PointerEventData eventData)
        {
            //最后一次单击的时间
            //3 test result:自游戏Start开始计时的描述,不受暂停影响，应该是
            //Time.time: 从游戏开始到到现在所用的时间。受暂停，Time.timeScale影响Time.realtimeSinceStartup
            //Time.realtimeSinceStartup: 以秒计，自游戏开始的实时时间，不被Time.timeScale影响。

            //Debug.LogError("OnPointerClick eventData.clickTime" + eventData.clickTime);
            //PC 当前鼠标指针位置 如果移动端应该是手指点击位置
            //15 test result:以屏幕左下角为坐标原点，向上为y ,向右为x (x,y 是像素值在分辨率范围内eg：1920x1080)  
            //Debug.LogError("OnPointerClick eventData.position" + eventData.position);

            //8 eventData.lastPress
            Debug.LogError("OnPointerClick eventData.lastPress:" + eventData.lastPress);

            Debug.LogError("OnPointerClick eventData.pointerDrag:" + eventData.pointerDrag);//有效
        }
        //开始拖拽
        public void OnBeginDrag(PointerEventData eventData)
        {
            //4
            Debug.LogError("OnBeginDrag eventData.delta:" + eventData.delta);
            //5 是否正处于拖拽中的状态
            //test result:eventData.dragging = false
            Debug.LogError("OnBeginDrag eventData.dragging:" + eventData.dragging);

            //8 eventData.lastPress
            Debug.LogError("OnBeginDrag eventData.lastPress:" + eventData.lastPress);

            //10 正拖动的object 
            //test result:OnBeginDrag OnDrag OnEndDrag都可以获取到
            Debug.LogError("OnBeginDrag eventData.pointerDrag:" + eventData.pointerDrag);
        }
        //拖拽中
        public void OnDrag(PointerEventData eventData)
        {
            //4 自上一帧结束到现在这帧移动位置增量（当前帧的位置减去上一帧的位置）
            Debug.LogError("OnDrag eventData.delta:" + eventData.delta);
            //5 是否正处于拖拽中的状态
            //test result:eventData.dragging = ture
            Debug.LogError("OnDrag eventData.dragging:" + eventData.dragging);

            //8 eventData.lastPress
            Debug.LogError("OnDrag eventData.lastPress:" + eventData.lastPress);
            //10 
            Debug.LogError("OnDrag eventData.pointerDrag:" + eventData.pointerDrag);
        }
        //结束拖拽
        public void OnEndDrag(PointerEventData eventData)
        {
            Debug.LogError("OnEndDrag eventData.delta:" + eventData.delta);

            //5 是否正处于拖拽中的状态
            //test result:eventData.dragging == ture
            Debug.LogError("OnEndDrag eventData.dragging:" + eventData.dragging);

            //8 eventData.lastPress
            Debug.LogError("OnEndDrag eventData.lastPress:" + eventData.lastPress);

            Debug.LogError("OnEndDrag eventData.pointerDrag:" + eventData.pointerDrag);
        }
        //查看 Drop_IDropHander OnDrop
        public void OnDrop(PointerEventData eventData)
        {
            Debug.LogError(gameObject.name+ " OnDrop eventData.delta:" + eventData.delta);
        }
    }
}
